//#include<iostream>
//using namespace std;
//bool flag[100][100];
//bool note[100];
//int count[100];
//int ans[100],p[100],ss;
//int maxs=-1,n;
//int fun(int i,int sum,int steps){
//	if(sum>maxs){
//		maxs=sum;
//		for(int i=0;i<steps;i++){
//			ans[i]=p[i];
//		}
//		ss=steps;
//	}
//	for(int j=i;j<n;j++){
//		if(note[j]==false&&flag[i][j]){
//			note[j]=true;
//			p[steps]=j;
//			fun(j,sum+count[j],steps+1);
//			note[j]=false;
//		}
//	}
//}
//int main(){
//
//	cin>>n;
//	for(int i=0;i<n;i++){
//		cin>>count[i];
//	}
//	for(int i=0;i<n-1;i++){
//		for(int j=i;j<n;j++){
//			if(i==j){
//				flag[i][j]=flag[j][i]=false;
//			}
//			else{
//				cin>>flag[i][j];
////				cout<<i<<' '<<j<<endl;
//				flag[j][i]=flag[i][j];
//			}
//		}
//	}
////	cout<<endl;
////	for(int i=0;i<n;i++){
////		for(int j=0;j<n;j++){
////			cout<<flag[i][j]<<' ';
////		}
////		cout<<endl;
////	}
//	for(int i=0;i<n;i++){
//		fun(i,0,0);
//	}
//
//	for(int i=0;i<ss;i++){
//		cout<<ans[i]+1<<' ';
//	}
//	cout<<endl<<maxs;
//}


#include<iostream>
using namespace std;
bool flag[100][100];
bool note[100];
int count[100];
int ans[100],p[100],ss;
long int maxs=-1,n;
void fun(int i,int sum,int steps){
	if(sum>maxs){
		maxs=sum;
		for(int i=0;i<steps;i++){
			ans[i]=p[i];
		}
		ss=steps;
	}
	for(int j=i+1;j<n;j++){
		if(flag[i][j]){
// 			note[j]=true;
			p[steps]=j;
			fun(j,sum+count[j],steps+1);
// 			note[j]=false;
		}
	}
}
int main(){

	cin>>n;
	for(int i=0;i<n;i++){
		cin>>count[i];
	}
	for(int i=0;i<n-1;i++){
		for(int j=i;j<n;j++){
			if(i==j){
				flag[i][j]=flag[j][i]=false;
			}
			else{
				cin>>flag[i][j];
				flag[j][i]=flag[i][j];
			}
		}
	}
	for(int i=0;i<n;i++){
	    p[0]=i;
	   // flag[i]=true;
		fun(i,count[i],1);
// 		flag[i]=false;
	}

	for(int i=0;i<ss;i++){
		cout<<ans[i]+1<<' ';
	}
	cout<<endl<<maxs;
}
